/*
 * MatrixMarketEnums.cs
 *
 * Copyright (c) 2005, dnAnalytics. All rights reserved.
 */
namespace dnAnalytics.LinearAlgebra.IO
{
    /// <summary>
    /// Enumeration of the different DenseMatrix Market storage formats.
    /// </summary>
    public enum StorageFormat
    {
        /// <summary>
        /// A standard matrix with no special properties.
        /// </summary>
        General,

        /// <summary>
        /// A square, symmetric matrix, <b>matrix[i,j] == matrix[j,i]</b>.
        /// </summary>
        Symmetric,

        /// <summary>
        /// A square, Hermitian matrix, <b>matrix[i,j] == matrix[j,i].Conjugate</b>.
        /// </summary>
        Hermitian,

        /// <summary>
        /// A square, skew-symmetric matrix, <b>matrix[i,j] == -matrix[j,i]</b>.
        /// </summary>
        SkewSymmetric
    }

    /// <summary>
    /// Enumeration of the different data types DenseMatrix Market files support. 
    /// </summary>
    public enum DataType
    {
        /// <summary>
        /// The matrix is real. DenseMatrix entries are represented by a single double.
        /// </summary>
        Real,

        /// <summary>
        ///  The matrix has only integer entries. DenseMatrix entries are represented by a single integer. 
        /// </summary>
        Integer,

        /// <summary>
        /// The matrix is complex. DenseMatrix entries are represented by two doubles, 
        /// the first giving the real part and the second the imaginary part.
        /// </summary>
        Complex,

        /// <summary>
        /// Only the matrix nonzero pattern is provided. DenseMatrix entries are omitted (only the nonzero pattern is supplied). 
        /// </summary>
        Pattern
    }

    /// <summary>
    /// Enumeration of the the DenseMatrix Market exchange formats.
    /// </summary>
    public enum ExchangeFormat
    {
        /// <summary>
        /// A file format suitable for representing general dense matrices. All entries are provided in a predefined (column oriented) order.
        /// </summary>
        Array,
        /// <summary>
        /// A file format suitable for representing general sparse matrices. Only nonzero entries 
        /// are provided, and the coordinates of each nonzero entry are given explicitly.
        /// </summary>
        Coordinate
    }
}
